package work.hashmap;

import java.util.HashMap;
import java.util.Map;

/**
 * @author WDH
 * @description
 * @date 2025年01月12日 22:27
 */

public class Problem454 {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        int length = nums1.length;
        int res = 0;
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        //统计两个数组中的元素之和，同时统计出现的次数，放入map
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length; j++) {
                int sum = nums1[i] + nums2[j];
                Integer count = map.getOrDefault(sum, 0);
                map.put(sum, count + 1);
            }
        }

        //统计剩余的两个元素的和，在map中找是否存在相加为0的情况，同时记录次数
        for (int i = 0; i < length; i++) {
            for (int j = 0; j < length; j++) {
                int sum = nums3[i] + nums4[j];
                //这里是牛逼的一种反向思路，我们以sum为主，去map里找-sum，有sum
                Integer orDefault = map.getOrDefault(0 - sum, 0);
                res += orDefault;
            }
        }
        return res;
    }

    public static void main(String[] args) {
        Problem454 problem454 = new Problem454();
        int [] num1 = {1,2};
        int [] num2 = {-2,-1};
        int [] num3 = {-1,2};
        int [] num4 = {0,2};
        problem454.fourSumCount(num1,num2,num3,num4);
    }



}
